ניסיתי להשתמש ב encodeURIComponent אבל משום מה הוא ממיר לי גם אותיות בעברית. מישהו יודע מה הדרך הכי נוחה לסנן את הקלט בלי התערבות של השרת?
8 תשובות
כרגע אני משתמש בקוד הזה לסינון זה מספיק מאובטח?
return s.replace(/&/g, '&').replace(/</g, '<').replace(/"/g, '"');
}
var textfield = document.getElementById(e);
var regex = /[^a-z 0-9?!.,]/gi;
if(textfield.value.search(regex) > -1) {
textfield.value = textfield.value.replace(regex, "");
}
}
מה שהקוד עושה בודק אם יש משהו אחר חוץ מהרגקס שהגדרת ומחליף אותו בתו ריק
אני אפילו יתן לך קוד משודרג שלא נותן למשתמש אפילו להקליד משהו שלא הגדרת ומוחק לו אותו ישר שהוא כותב אותו.
var textfield = document.getElementById(e);
var regex = /[^a-z 0-9?!.,]/gi;
if(textfield.value.search(regex) > -1) {
textfield.value = textfield.value.replace(regex, "");
}
}
<div>
<textarea id="comment" name="ta" onkeyup="clean('comment')" onkeydown="clean('comment')"></textarea>
</div>
זה נחמד והכול, אבל אתה לא צריך להגביל את הטקסט למספר תווים מסוימים רק כדי לסתום פריצת XSS; אתה יכול פשוט להשתמש בפונקציות שימירו את התווים המיוחדים ל-HTML Entities (כך שהם עדיין יישמרו - צריך את זה בהמון מקרים - ולא יזיקו!). וחוץ מזה, אתה לא שולט על איך הלקוח שולח לך נתונים. זה נחמד ויעיל לסנן נתונים בצד הלקוח, אבל מבחינת אבטחה - תצטרך גם לסנן את זה בצד השרת! תמיד! הטופס הזה זה לא הדרך היחידה לשלוח לך נתונים, וגם את הטופס והסקריפט האלה אפשר לשנות בדפדפן הלקוח (כל אחד בפני עצמו), שזו דרך אחת לרמות למשל.
אני ממליץ לך לקרוא את המדריך שפורסם כאן בנושא XSS.
אוראל אל תדאג אני מסנן את זה גם בשרת ע"י html_entities אבל כאן זה לצורך אחר, כדי שהמשתמש יראה מיד שהתגובה שלו נוספה ללא צורך בריפרוש הדף
וחוץ מזה אני חושב שזה מצוין להגביל את המשתמש עוד בקלט
למה? אבל יכול להיות שהייתה תקלה בביצוע של הסקריפט בצד השרת, והתגובה לא נוספה. אם בכל זאת תרצה את זה תצטרך להשתמש ב-AJAX. :-)
אני מסכים איתך, אבל יש גבול להגבלה. :-) זו תגובה, נכון? לך תדע איזה תווים יכולים להיות שם. מה עם מקף? קו מפריד? נקודה-פסיק? סימן הסעיף (§)? סימנים מיוחדים אחרים? תגובה כדאי פשוט לא להגביל בסוג התווים במחרוזת הקלט, ולמניעת XSS פשוט להבריח את התווים המיוחדים ב-HTML.